Some existing systems perform graphics commands received from various processes. Specifically hardware, including graphics processing units (GPUs) manage execution of graphics commands. The graphics commands may vary in complexity between two-dimensional commands, three-dimensional commands, surface mapping commands, shading commands, texture rendering commands, and the like. Depending on the complexity of a graphics command, performance of the graphics command may utilize more or less of the GPU resources available to all the processes. Some of the processes, such as virtual machines (VMs), may be operated by different customers, tenants, or users on the same system. Disparity among the needs of the different users and among the different graphics commands often results in an unfair disparity of use of the GPU. In some instances, monopolization of the GPU resources occurs.
There may be multiple different GPUs, having different characteristics and different processing capabilities from each other, in a single system. Drivers for the GPUs reside in the kernel and generally consider all graphics commands as originating from a single user. In such systems, the GPU may execute the graphics commands in a first-in, first-out manner. The GPU drivers do not consider the size or complexity of each graphics command, or the specific processing capabilities of each GPU. Further, the GPU does not recognize any prioritization among the graphics commands. Allocation of graphics commands among the GPUs without regard to complexity of graphics commands or GPU processing power lead to imbalanced loads and sub-optimal throughput.